package locadora.aplicacao;

import locadora.negocio.pessoas.*;
import miscelanea.Data;

public class TelaFuncionario extends Tela {

	public TelaFuncionario(Pessoa usuario) {
		super("Gereciador do sistema", usuario);
	}
	
	protected void imprimirTela() {
		while(true) {
			int opcao = -1;
			while(opcao < 0 || opcao > 3) {
				this.limpar();
				this.imprimirMensagem(this.titulo);
				this.imprimirMensagem("");
				this.imprimirMensagem("(1) Cadastrar funcionário");
				this.imprimirMensagem("(2) Alterar dados do funcionário");
				this.imprimirMensagem("(3) Exluir funcionário");
				this.imprimirMensagem("");
				this.imprimirMensagem("(0) Voltar");
				this.imprimirMensagem("");
				this.requisitarEntrada("Por favor, escolha uma opção.");
				try { opcao = Integer.parseInt(this.lerEntrada()); }
				catch(Exception e) { this.imprimirErro("Opção inválida!"); }
			}
			this.limpar();
			switch(opcao) {
				case 1: this.cadastrarFuncionario(); break;
				case 2: this.atualizarFuncionario(); break;
				case 3: this.removerFuncionario(); break;
				case 0: return;
			}
		}
	}
	
	private void cadastrarFuncionario() {
		Funcionario funcionario = this.novoFuncionario();
		if(funcionario  == null) return;
		try {
			if(this.usuario instanceof Gerente) {
				Gerente g = (Gerente) this.usuario;
				g.adicionar(funcionario);
			}
		} catch(Exception e) { this.imprimirErro(e.getMessage()); }
	}
	
	private void atualizarFuncionario() {
		this.requisitarEntrada("Por favor, insira a chave do funcionário a ser atualizado.");
		try {
			String chave = this.lerEntrada();
			Funcionario funcionario = this.novoFuncionario();
			if(funcionario == null) return;
			if(this.usuario instanceof Gerente) {
				Gerente g = (Gerente) this.usuario;
				g.atualizar(chave, funcionario);
			}
		} catch(Exception e) { this.imprimirErro(e.getMessage()); }
	}
	
	private void removerFuncionario() {
		this.requisitarEntrada("Por favor, insira a chave do funcionário a ser removido.");
		try {
			String chave = this.lerEntrada();
			if(this.usuario instanceof Gerente) {
				Gerente g = (Gerente) this.usuario;
				g.removerPessoa(chave);
			}
		} catch(Exception e) { this.imprimirErro(e.getMessage()); }
	}
	
	private Funcionario novoFuncionario() {
		Data dataNascimento;
		String nome, identidade, orgaoExpedidor, CPF, logradouro, CEP, bairro, cidade, estado;
		String tmp;
		
		this.requisitarEntrada("Por favor, insira o nome do funcionário.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("O nome não pode ficar em branco!");
			return null;
		} else {
			nome = new String(tmp);
		}
		
		this.requisitarEntrada("Por favor, insira a data de nascimento do funcionário (no formato ddmmyyyy).");
		try { 
			dataNascimento = new Data(this.lerEntrada());
		} catch(Exception e) { 
			this.imprimirErro("Data inválida!");
			return null;
		}
		
		this.requisitarEntrada("Por favor, insira a identidade do funcionário.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("A identidade não pode ficar em branco!");
			return null;
		} else {
			identidade = new String(tmp);
		}
		
		this.requisitarEntrada("Por favor, insira o órgão expedidor da identidade.");
		tmp = this.lerEntrada();
		orgaoExpedidor = new String(tmp);
		
		this.requisitarEntrada("Por favor, insira o CPF do cliente.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("O CPF não pode ficar em branco!");
			return null;
		} else {
			CPF = new String(tmp);
		}

		this.requisitarEntrada("Por favor, insira o logradouro do funcionário.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("O logradouro não pode ficar em branco!");
			return null;
		} else {
			logradouro = new String(tmp);
		}
	
		this.requisitarEntrada("Por favor, insira o bairro do funcionário.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("O bairro não pode ficar em branco!");
			return null;
		} else {
			bairro = new String(tmp);
		}
		
		this.requisitarEntrada("Por favor, insira a cidade do funcionário.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("A cidade não pode ficar em branco!");
			return null;
		} else {
			cidade = new String(tmp);
		}
		
		this.requisitarEntrada("Por favor, insira o estado do funcionário.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("O estado não pode ficar em branco!");
			return null;
		} else {
			estado = new String(tmp);
		}
		
		this.requisitarEntrada("Por favor, insira o CEP do funcionário.");
		tmp = this.lerEntrada();
		if(tmp.length() < 1 ) { 
			this.imprimirErro("O CEP não pode ficar em branco!");
			return null;
		} else {
			CEP = new String(tmp);
		}
		
		Funcionario funcionario = null;
		try { funcionario = new Funcionario(nome, dataNascimento, identidade, orgaoExpedidor, CPF, logradouro, CEP, bairro, cidade, estado); }
		catch(Exception e) { this.imprimirErro(e.getMessage()); }

		return funcionario;
	}
	
}


